package com.bupt.hotel.hvac.common;

import com.bupt.hotel.hvac.model.enums.ACMode;
import com.bupt.hotel.hvac.model.enums.FanSpeed;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 系统常量
 */
public class Constants {

        /**
         * 默认温度
         */
        public static final BigDecimal DEFAULT_TEMP = new BigDecimal("25.0");

        /**
         * 温度调节步长
         */
        public static final BigDecimal TEMP_STEP = new BigDecimal("0.5");

        /**
         * 初始环境温度（根据模式）
         */
        public static final Map<ACMode, BigDecimal> INITIAL_TEMP = Map.of(
                        ACMode.COOLING, new BigDecimal("30.0"), // 制冷模式下初始温度较高
                        ACMode.HEATING, new BigDecimal("15.0") // 制热模式下初始温度较低
        );

        /**
         * 温控范围
         */
        public static final Map<ACMode, TempRange> TEMP_RANGE = Map.of(
                        ACMode.COOLING, new TempRange(new BigDecimal("18.0"), new BigDecimal("25.0")),
                        ACMode.HEATING, new TempRange(new BigDecimal("25.0"), new BigDecimal("30.0")));

        /**
         * 计费标准（元/度）
         */
        public static final BigDecimal BILLING_RATE = new BigDecimal("1.0");

        /**
         * 耗电标准（度/分钟）
         */
        public static final Map<FanSpeed, BigDecimal> POWER_CONSUMPTION_RATE = Map.of(
                        FanSpeed.HIGH, new BigDecimal("1.0"), // 1度/分钟
                        FanSpeed.MEDIUM, new BigDecimal("0.5"), // 0.5度/分钟
                        FanSpeed.LOW, new BigDecimal("0.333333") // 1/3度/分钟
        );

        /**
         * 温度变化率（度/分钟）
         */
        public static final Map<FanSpeed, BigDecimal> TEMP_CHANGE_RATE = Map.of(
                        FanSpeed.MEDIUM, new BigDecimal("0.5"), // 0.5度/分钟
                        FanSpeed.HIGH, new BigDecimal("0.6"), // 0.6度/分钟 (0.5 * 1.2)
                        FanSpeed.LOW, new BigDecimal("0.4") // 0.4度/分钟 (0.5 * 0.8)
        );

        /**
         * 关机状态下温度变化率（度/分钟）
         */
        public static final BigDecimal TEMP_CHANGE_RATE_OFF = new BigDecimal("0.5");

        /**
         * 目标温度偏离阈值（度）
         */
        public static final BigDecimal TEMP_DEVIATION_THRESHOLD = new BigDecimal("1.0");

        // ==================== 酒店管理相关常量 ====================

        /**
         * 统一押金（元）
         */
        public static final Double STANDARD_DEPOSIT = 200.0;

        /**
         * 押金状态 - 已缴纳
         */
        public static final String DEPOSIT_STATUS_PAID = "PAID";

        /**
         * 押金状态 - 已退还
         */
        public static final String DEPOSIT_STATUS_REFUNDED = "REFUNDED";

        /**
         * 温度范围类
         */
        public static class TempRange {
                public final BigDecimal min;
                public final BigDecimal max;

                public TempRange(BigDecimal min, BigDecimal max) {
                        this.min = min;
                        this.max = max;
                }
        }
}
